//dialogdisplayeditV1 by sby

import flash.utils.Dictionary;
import flash.geom.ColorTransform;

var main;
var modSettingsLoader:Class;
var g;
var her;

var setsettingsfilename = "dialogdisplayeditV1settings";		//rename "mysettings" to desired name of settings file, will be used if default mod name does not work


var color:ColorTransform;
var colort:ColorTransform;


var bgbrighten = false;
var textbrighten = false;

var bgalpha:Number = 1;
var textalpha:Number = 1;
var bgalphaori:Number = 1;
var textalphaori:Number = 1;

var bgredmult:int = 1;
var bgbluemult:int = 1;
var bggreenmult:int = 1;
var bgredoffset:int = 0;
var bgblueoffset:int = 0;
var bggreenoffset:int = 0;

var textredmult:int = 1;
var textbluemult:int = 1;
var textgreenmult:int = 1;
var textredoffset:int = 0;
var textblueoffset:int = 0;
var textgreenoffset:int = 0;



var bgredmultt:int = 1;
var bgbluemultt:int = 1;
var bggreenmultt:int = 1;
var bgredoffsett:int = 0;
var bgblueoffsett:int = 0;
var bggreenoffsett:int = 0;

var textredmultt:int = 1;
var textbluemultt:int = 1;
var textgreenmultt:int = 1;
var textredoffsett:int = 0;
var textblueoffsett:int = 0;
var textgreenoffsett:int = 0;


var bgredmulth:int = 1;
var bgbluemulth:int = 1;
var bggreenmulth:int = 1;
var bgredoffseth:int = 0;
var bgblueoffseth:int = 0;
var bggreenoffseth:int = 0;

var textredmulth:int = 1;
var textbluemulth:int = 1;
var textgreenmulth:int = 1;
var textredoffseth:int = 0;
var textblueoffseth:int = 0;
var textgreenoffseth:int = 0;


var showingflag:Boolean;
var frametracker:int = -1;
var persistafterreset:int = 0;
var alphaholder:Number = 0;
var alphaholdert:Number = 0;
var delayflag = false;

function initl(l)			//boiler plate setup for getting settings started, put startup stuff here that are not dependent on loaded settings
{
	main = l;
	g = l.g;
	her = l.her;
	
	var msl = new modSettingsLoader(setsettingsfilename,settingsLoaded);
	msl.addEventListener("settingsNotFound",settingsNotFound);
}

function finishinit()		//put startup stuff here that require loaded settings
{
	
	
	bgalphaori = g.dialogueControl.getChildAt(0).alpha;
	textalphaori = g.dialogueControl.getChildAt(1).alpha;
	
	if(bgalphaori <= bgalpha)
	{
		bgbrighten = true;	//background
		
	}
	if(textalphaori <= textalpha)	
	{
		textbrighten = true;
		
	}	
	
	
	g.dialogueControl.gotoAndStop(2);
	g.dialogueControl.gotoAndStop(3);
	g.dialogueControl.gotoAndStop(1);
	g.dialogueControl.getChildAt(0).alpha = bgalpha;
	g.dialogueControl.gotoAndStop(1);
	
	g.dialogueControl.gotoAndStop(3);
	g.dialogueControl.gotoAndStop(1);
	g.dialogueControl.gotoAndStop(2);
	g.dialogueControl.getChildAt(0).alpha = bgalpha;
	g.dialogueControl.gotoAndStop(2);
	
	g.dialogueControl.gotoAndStop(2);
	g.dialogueControl.gotoAndStop(1);
	g.dialogueControl.gotoAndStop(3);
	g.dialogueControl.getChildAt(0).alpha = bgalpha;
	g.dialogueControl.gotoAndStop(3);
	
	g.dialogueControl.getChildAt(1).alpha=textalpha;
	
	updatealphacolors();
	
	
	if(persistafterreset==1)
	{
		main.addEnterFramePersist(doCheck);
	}
	else
	{
		main.addEnterFrame(doCheck);
		main.registerUnloadFunction(doUnload);
	}
	main.unloadMod();
}

	






function settingsLoaded(e)					//loads settings from file
{
	var dict:Dictionary = e.settings;
	for (var key:Object in dict)
	{
		var val:Object = dict[key];
		if ( this.hasOwnProperty( key ) )			//checks if variable exists
		{
			this[key] = Number(val);    								//replaces all switch statement variable assignments
		}
		else
		{
			main.updateStatusCol("invalid setting: "+key,"#FF0000");	//displays if there is a setting in the settings file that does not match any variables
		}
	}
	finishinit();
	main.updateStatusCol(setsettingsfilename+" done loading","#00ff00");
	
}

function settingsNotFound(e)
{
	main.updateStatusCol(e.msg,"#FF0000");		//display error message
	finishinit();
}

function doCheck(e)			//master function called every frame
{
	
	if(g.dialogueControl.showingText)
	{
		
		if(!g.dialogueControl.fadingOut)
		{
			g.dialogueControl.getChildAt(0).alpha = (bgalpha - g.dialogueControl.getChildAt(0).alpha)*0.1 + g.dialogueControl.getChildAt(0).alpha;
			g.dialogueControl.getChildAt(1).alpha = (textalpha - g.dialogueControl.getChildAt(1).alpha)*0.1 + g.dialogueControl.getChildAt(1).alpha;
		}
		
		checkactionsf();
		updatealphacolors();
	
	}
	else
	{
		showingflag = true;
	}
	delayflag = g.dialogueControl.showingText;
	
}

function updatealphacolors()
{
	if((g.dialogueControl.showingText && frametracker != g.dialogueControl.currentFrame) || (g.dialogueControl.showingText && !delayflag))
	{
		frametracker = g.dialogueControl.currentFrame;
		
		alphaholder = g.dialogueControl.getChildAt(0).alpha;
		alphaholdert = g.dialogueControl.getChildAt(1).alpha;
		//main.updateStatus(alphaholder);
		//main.updateStatus(frametracker);
		
		
		switch(frametracker)
		{
			case 1:
			g.dialogueControl.gotoAndStop(2);
			g.dialogueControl.gotoAndStop(3);
			g.dialogueControl.gotoAndStop(1);
			g.dialogueControl.getChildAt(0).alpha = alphaholder;
			g.dialogueControl.gotoAndStop(1);
			//main.updateStatus("speaking");
			break;
			case 2:
			g.dialogueControl.gotoAndStop(3);
			g.dialogueControl.gotoAndStop(1);
			g.dialogueControl.gotoAndStop(2);
			g.dialogueControl.getChildAt(0).alpha = alphaholder;
			g.dialogueControl.gotoAndStop(2);
			//main.updateStatus("thought");
			break;
			case 3:
			g.dialogueControl.gotoAndStop(2);
			g.dialogueControl.gotoAndStop(1);
			g.dialogueControl.gotoAndStop(3);
			g.dialogueControl.getChildAt(0).alpha = alphaholder;
			g.dialogueControl.gotoAndStop(3);
			//main.updateStatus("him");
			break;
		}
		g.dialogueControl.getChildAt(1).alpha = alphaholdert;
		updatecolors();
	}
}


function updatecolors()
{
	switch(g.dialogueControl.currentFrame)
	{
		case 1 :	//her
			color = g.dialogueControl.getChildAt(0).transform.colorTransform;
			color.redMultiplier = bgredmult;
			color.blueMultiplier = bgbluemult;
			color.greenMultiplier = bggreenmult;
			color.redOffset = bgredoffset;
			color.blueOffset = bgblueoffset;
			color.greenOffset = bggreenoffset;
			g.dialogueControl.getChildAt(0).transform.colorTransform = color;
			
			colort = g.dialogueControl.getChildAt(1).transform.colorTransform;
			colort.redMultiplier = textredmult;
			colort.blueMultiplier = textbluemult;
			colort.greenMultiplier = textgreenmult;
			colort.redOffset = textredoffset;
			colort.blueOffset = textblueoffset;
			colort.greenOffset = textgreenoffset;
			g.dialogueControl.getChildAt(1).transform.colorTransform = colort;
		
			break;
		case 2 :	//thought
			color = g.dialogueControl.getChildAt(0).transform.colorTransform;
			color.redMultiplier = bgredmultt;
			color.blueMultiplier = bgbluemultt;
			color.greenMultiplier = bggreenmultt;
			color.redOffset = bgredoffsett;
			color.blueOffset = bgblueoffsett;
			color.greenOffset = bggreenoffsett;
			g.dialogueControl.getChildAt(0).transform.colorTransform = color;
			
			colort = g.dialogueControl.getChildAt(1).transform.colorTransform;
			colort.redMultiplier = textredmultt;
			colort.blueMultiplier = textbluemultt;
			colort.greenMultiplier = textgreenmultt;
			colort.redOffset = textredoffsett;
			colort.blueOffset = textblueoffsett;
			colort.greenOffset = textgreenoffsett;
			g.dialogueControl.getChildAt(1).transform.colorTransform = colort;
		
			break;
		case 3 :		//him
			color = g.dialogueControl.getChildAt(0).transform.colorTransform;
			color.redMultiplier = bgredmulth;
			color.blueMultiplier = bgbluemulth;
			color.greenMultiplier = bggreenmulth;
			color.redOffset = bgredoffseth;
			color.blueOffset = bgblueoffseth;
			color.greenOffset = bggreenoffseth;
			g.dialogueControl.getChildAt(0).transform.colorTransform = color;
			
			colort = g.dialogueControl.getChildAt(1).transform.colorTransform;
			colort.redMultiplier = textredmulth;
			colort.blueMultiplier = textbluemulth;
			colort.greenMultiplier = textgreenmulth;
			colort.redOffset = textredoffseth;
			colort.blueOffset = textblueoffseth;
			colort.greenOffset = textgreenoffseth;
			g.dialogueControl.getChildAt(1).transform.colorTransform = colort;
		
			break;
	
	}
	
}


function checkactionsf()
{
	if(g.dialogueControl.words.length == 1)
	{
		if(g.dialogueControl.words[0].length == 0)
		{
			//main.updateStatus("0d for no length");
			g.dialogueControl.getChildAt(0).alpha = 0;
			g.dialogueControl.getChildAt(1).alpha = 0;
			g.dialogueControl.fadingIn = false;
			showingflag = false;
		}
		
	}
	if(g.dialogueControl.words && g.dialogueControl.sayingWord && showingflag)
	{
		if(g.dialogueControl.sayingWord-1 < g.dialogueControl.words.length)
		{
			
			/*if(g.dialogueControl.sayingWord-1 == 0)
			{
				showingflag = true;
			}*/
			
			if(g.dialogueControl.words[g.dialogueControl.sayingWord-1].actionWord)
			{
				//main.updateStatus("0d by action");
				g.dialogueControl.getChildAt(0).alpha = 0;
				g.dialogueControl.getChildAt(1).alpha = 0;
				g.dialogueControl.fadingIn = false;
				
			}
			else
			{
				//main.updateStatus("showed false");
				g.dialogueControl.fadingIn = true;
				showingflag = false;
			}
		}
	}
		
}


function doUnload()		//removes docheck from frame event
{
	
		g.dialogueControl.getChildAt(0).transform.colorTransform = new ColorTransform();
		g.dialogueControl.getChildAt(1).transform.colorTransform = new ColorTransform();
		
		g.dialogueControl.getChildAt(0).alpha = bgalphaori;
		g.dialogueControl.getChildAt(1).alpha = textalphaori;
		
		updatealphacolors();
	
}


